Skip to content

0x003-duplicate symbol与-all_load

引入腾讯人脸识别动态库,编译报错duplicate symbol

经过排查,去掉项目other link flag 中的 -all_load 后不报错了。

  • -ObjC 链接器会加载静态库中所有的Objective-C类和Category (Passing the -ObjC option to the linker causes it to load all members of static libraries that implement any Objective-C class or category)
  • -all_load: 会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!当两个静态库存在同样的符号时,就会产生ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
  • -force_load: 加载指定静态库的全部类,与-all_load类似但是只限定于特定静态库,所以-force_load需要指定静态库。

参考: